package com.mazaiting.mybatisplus.sensitive.utils;

import com.mazaiting.mybatisplus.sensitive.FiledSensitive;
import org.apache.ibatis.mapping.SqlCommandType;
import org.springframework.util.StringUtils;

import java.util.Objects;

/**
 * 工具类进行判断
 *
 * @author danghailiang
 */
public class SensitiveUtil {

    /**
     * 暂不启用(后期脱敏使用)
     *
     * @param filedSensitive 注解
     * @param defaultType    默认签名
     * @return 返回签名
     */
    public static String getType(FiledSensitive filedSensitive, String defaultType) {
        String type = filedSensitive.type();
        if (!StringUtils.hasLength(type)) {
            // 如果没有设置签名名则使用默认签名
            return Objects.isNull(type) ? "" : defaultType;
        }
        return type;
    }

    /**
     * 暂不启用(对结果集进行脱敏)
     * 判断sql语句类型
     *
     * @param parameter      参数
     * @param sqlCommandType 执行sql类型
     * @return 布尔值
     */
    public static boolean sensitiveRequired(Object parameter, SqlCommandType sqlCommandType) {
        // 判断sqlCommandType类别 是否符合条件
        return sqlCommandType == SqlCommandType.SELECT
                // 判断参数是否符合条件
                && sensitiveRequired(parameter);
    }

    /**
     * 判断对象类型 除了字符串，都返回为false
     *
     * @param parameter 被加密参数
     * @return 是否符合
     */
    public static boolean sensitiveRequired(Object parameter) {
        return !(Objects.isNull(parameter) || parameter instanceof Double || parameter instanceof Integer
                || parameter instanceof Long || parameter instanceof Short || parameter instanceof Float
                || parameter instanceof Boolean || parameter instanceof Character
                || parameter instanceof Byte);
    }
}
